01 开篇: Kubernetes 是什么以及为什么需要它

Kubernetes 是一个可扩展的,用于容器化应用程序编排,管理的平台。由 Google 于 2014 年基于其大规模生产实践经验而开源出来的。Kubernetes 目前在容器编排领域已经成为事实上的标准,社区也非常活跃。

Kubernetes 在国内外都已经得到广泛的应用,无论是Google, Amazon, GitHub 等还是国内的阿里,腾讯,百度,华为,京东或其他中小公司等也都已全力推进 Kubernetes 在生产中的使用。

现在无论是运维,后端,DBA,亦或者是前端,机器学习工程师等都需要在工作中或多或少的用到 Docker, 而在生产中大量使用的话 Kubernetes 也将会成为趋势,所以了解或掌握 Kubernetes 也成为了工程师必不可少的技能之一。

Kubernetes 是什么?

当提到 Kubernetes 的时候,大多数人的可能会想到它可以容器编排,想到它是 PaaS (Platform as a Service) 系统,但其实不然,Kubernetes 并不是 PasS 系统,因为它工作在容器层而不是硬件层,它只不过提供了一些与 PasS 类似或者共同的功能,类似部署,扩容,监控,负载均衡,日志记录等。然而它并不是个完全一体化的平台,这些功能基本都是可选可配置的。

Kubernetes 可支持公有云,私有云及混合云等,具备良好的可移植性。我们可直接使用它或在其之上构建自己的容器/云平台,以达到快速部署,快速扩展,及优化资源使用等。

它致力于提供通用接口类似 CNI( Container Network Interface ), CSI(Container Storage Interface), CRI(Container Runtime Interface)等规范,以便有更多可能, 让更多的厂商共同加入其生态体系内。它的目标是希望在以后,任何团队都可以在不修改 Kubernetes 核心代码的前提下,可以方便的扩展和构建符合自己需求的平台。

为什么需要 Kubernetes

我们回到实际的工作环境中。

  • 如果你是个前端,你是否遇到过 npm 依赖安装极慢,或是 node sass 安装不了或者版本不对的情况?
  • 如果你是个后端,是否遇到过服务器与本地环境不一致的情况,导致部分功能出现非预期的情况?
  • 如果你是个运维,是否遇到过频繁部署环境,但中间可能出现各种安装不了或者版本不对的问题?

目前来看,对于这些问题,最好的解决方案便是标准化,容器化,现在用到最多的也就是 Docker。 Docker 通过 Dockerfile 来对环境进行描述,通过镜像进行交付,使用时不再需要关注环境不一致相关的问题。

现在面试的时候,无论前后端,我们总会多问下是否了解或者使用过 Docker 。如果使用过,那自然会问如果规模变大或者在生产中如何进行容器编排,部署扩容机制如何。

多数人在这个时候都已经回答不上来了,一方面是因为非运维相关岗位的同学,可能在实际工作中并不了解整体的架构体系,没有相关的知识积累。另一方面,对于运维同学可能尚未接触到这部分。

作为一个技术人员,我们应该对整体的体系架构有所了解, 掌握更多的技能,了解软件的完整生命周期,包括开发,交付,部署,以及当流量变大时的扩容等。

在容器编排领域,比较著名的主要有三个:Kubernetes, Mesos, 及 Docker 自家的 Swarm . 对这三者而言,较为简单的是 Swarm, 因为它本身只专注于容器编排,并且是官方团队所作,从各方面来看,对于新手都相对友好一些。但如果是用于生产中大规模使用,反而就略有不及。

而 Mesos 也并不仅限于容器编排,它的创建本身是为了将数据中心的所有资源进行抽象,比如 CPU,内存,网络,存储等,将整个 Mesos 集群当作是一个大的资源池,允许各种 Framework 来进行调度。比如,可以使用 Marathon 来实现 PaaS,可以运行 Spark,Hadoop 等进行计算等。同时因为它支持比如 Docker 或者 LXC 等作资源隔离,所以前几年也被大量用于容器编排。

随着 Kubernetes 在目前的认可度已经超过 Mesos, Docker Swarm 等,无疑它是生产环境中容器应用管理的不二之选。

本小册的目标是帮助更多开发者(不局限于运维,后端,前端等)认识并掌握 Kubernetes 的基础技能,了解其基础架构等。但是 Kubernetes 涉及知识点很多,且更新迭代很快,本小册集中于使用轻快的文字帮助大家掌握 K8S 的通用基础技能,对于其中需掌握的关于 Docker,及 Linux 内核相关的知识不会过于深入解释。主要以最常见 case 入手,帮助大家更快的掌握相关知识并将其用于生产实践中。